const express = require('express')
const md5 = require('md5')
const adminModel = require('../db/models/adminModel')
const router = express.Router()

// 引入我们自己封装的jwtManger
const jwtManger = require('../utils/jwtManger')

//登录
router.post('/login', async (req, res) => {
  // 1.接收客户端上传的用户名和密码
  const { username, password } = req.fields
  // 2.根据用户名和密码查询数据库,查看是否有这条数据
  // findOne找到数据就是数据对象,找不到返回null
  // 注意: 由于注册时密码加密了.所以查询时,应该以加密之后的秘文进行查询
  const admin = await adminModel.findOne({ username, password: md5(password) })
  if (admin) {
    // 3.如果有这条数据,则生成token,然后将token存储到数据库中,还要将token响应给浏览器
    // 生成token,我们要往token里面添加一个时间戳.用于后面校验token的有效期
    // const token = jwt.encode({ id: admin._id, expires: Date.now() }, 'xxx')
    // console.log(token)
    // console.log(jwt.decode(token, 'xxx'))
    const token = jwtManger.encodeToken(admin._id)

    // 将token存储到数据库中.存储到当前登录用户的token字段里面以及修改管理员登录时间
    await adminModel.updateOne(
      { _id: admin._id },
      { $set: { token, last_login: Date.now() } }
    )
    // 将token响应给浏览器
    // delete admin.password //删除对象中的密码
    // admin.password = ''
    res.send({
      status: 1,
      message: '登录成功',
      token,
      admin: { id: admin._id, username: admin.username },
    })
  } else {
    // 4.如果没有,则直接响应客户端,用户名或密码错误
    res.send({ status: 0, message: '登录失败,用户名或密码错误' })
  }
})

// 退出登录
router.get('/logout', async (req, res) => {
  // 1. 需要获取用户上传的id
  const { id } = req.query
  // 2. 删除token
  await adminModel.updateOne({ _id: id }, { $set: { token: '' } })
  // 3. 响应
  res.send({ status: 1, message: '退出登录' })
})

module.exports = router
